// 引入配置
import {
	invalidCode,
	successCode
} from '@/common/config'
import errorCode from '@/utils/errorCode'
import store from '@/store'

/**
 * 响应拦截
 * @param {Object} http 
 */
module.exports = (vm) => {
    uni.$u.http.interceptors.response.use((res) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
		console.log(res);
        // 未设置状态码则默认成功状态
        const code = res.data.code || 200;
        // 获取错误信息
        const msg = errorCode[code] || res.data.msg || errorCode['default']
        // 二进制数据则直接返回
        if(res.request && (res.request.responseType ===  'blob' || res.request.responseType ===  'arraybuffer')){
            return res.data
        }
		
        // 自定义参数
        const custom = res.config?.custom
        if (code !== successCode) { // 服务端返回的状态码不等于200，则reject()
		
			if (code === invalidCode) {
			  store.dispatch('user/FedLogOut').then(() => {
			    uni.redirectTo({
			        url: '/pages/system/login/index'
			    })  
			  })
			}
		
            // 如果没有显式定义custom的toast参数为false的话，默认对报错进行toast弹出提示
            if (custom.toast !== false) {
                uni.$u.toast(msg)
            }
            // 如果需要catch返回，则进行reject
            if (custom?.catch) {
                return Promise.reject(res)
            } else {
                // 否则返回一个pending中的promise
                return new Promise(() => { })
            }
        }
        return res.data || {}
    }, (error) => { /*  对响应错误做点什么 （statusCode !== 200）*/	
		console.log(error);
		let { errMsg } = error;
		if (errMsg == "Network Error") {
		  errMsg = "后端接口连接异常";
		}
		else if (errMsg.includes("timeout")) {
		  errMsg = "系统接口请求超时";
		}
		else if (errMsg.includes("Request failed with status code")) {
		  errMsg = "系统接口" + errMsg.substr(errMsg.length - 3) + "异常";
		}   
		uni.$u.toast(errMsg);
        return Promise.reject(error)
    })
}